package com.example.recur;

import java.util.Stack;

/**
 * @Date 2023-07-02
 * @Author Jonathan
 */
public class PrintArr {
    public static void main(String[] args) {
        int[] ints = new int[]{1, 2, 3, 4};
//        print(ints, 0);
        printArrIter(ints);
        System.out.println(sum(ints, 0));
    }


    static class FunctionFrame {
        int start;

        public FunctionFrame(int start) {
            this.start = start;
        }
    }


    private static void printArrIter(int[] nums) {
        // 定义显示栈 作用和系统栈是一样的
        Stack<Integer> stack = new Stack<>();
        stack.push(0);
        while (!stack.isEmpty()) {
            Integer frame = stack.pop();
            // 判断退出条件
            if (frame >= nums.length) {
                return;
            }
            // 第一步
            System.out.println(nums[frame]);
            // 第二步
            stack.push(frame + 1);
        }
    }

    public static void print(int[] arr, int index) {
        // 最小子问题  递归退出条件
        if (index >= arr.length) {
            return;
        }
        // 打印数组区间的第一个元素
        System.out.println(arr[index]);
        //  求解子问题
        print(arr, index + 1);

    }

    /**
     * 求数组的和
     */
    public static Integer sum(int[] arr, int index) {
        if (index == arr.length - 1) {
            return arr[index];
        }
        return arr[index] + sum(arr, index + 1);
    }
}
